/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
//bruno.Moreira
package controller;

import dao.DAOFactory;
import dao.FornecedorDAO;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import model.Fornecedor;
import ordenacao.OrdenacaoPorCodigoFornecedor;
import ordenacao.OrdenacaoPorNomeFornecedor;
import utils.ExcecaoSCEV;







public class CtrCadastroFornecedor {
        private static CtrCadastroFornecedor umCtrCadastroFornecedor;
    FornecedorDAO fornecedorDAO;

    private CtrCadastroFornecedor(){


     DAOFactory daoFactory = new DAOFactory();
     fornecedorDAO = daoFactory.getFornecedorDAO();

    }

    public static CtrCadastroFornecedor getInstance(){
        if (umCtrCadastroFornecedor == null){
            umCtrCadastroFornecedor = new CtrCadastroFornecedor();
        }
        return umCtrCadastroFornecedor;
    }


    public List <Fornecedor> listarTodos(int ordenacao) throws ExcecaoSCEV{
        List <Fornecedor>lista = new ArrayList <Fornecedor>();
        lista = fornecedorDAO.pegarTodos();
        ordenar(ordenacao, lista);
        return lista;
    }
    
     
    private boolean validar(Fornecedor fornecedor) throws ExcecaoSCEV {
                 
        if(fornecedor.getNome() == null || fornecedor.getNome().trim().equals("")){
            throw new ExcecaoSCEV("Nome deve ser preenchido");
        }
        if(fornecedor.getCnpj() == null || fornecedor.getCnpj().trim().equals("")){
            throw new ExcecaoSCEV("Cnpj deve ser preenchido");
        }       
        if (fornecedor.getLogradouro() == null || fornecedor.getLogradouro().equals("")){
            throw new ExcecaoSCEV("Logradouro deve ser preenchido");
        }
        if (fornecedor.getNumero() == null || fornecedor.getNumero().equals("")){
            throw new ExcecaoSCEV("Número deve ser preenchido");
        }
        if (fornecedor.getBairro() == null || fornecedor.getBairro().equals("")){
            throw new ExcecaoSCEV("Bairro deve ser preenchido");
        }
        if (fornecedor.getCidade() == null || fornecedor.getCidade().equals("")){
            throw new ExcecaoSCEV("Cidade deve ser preenchida");
        }
        if (fornecedor.getUf() == null || fornecedor.getUf().trim().equals("")){
            throw new ExcecaoSCEV("Estado deve ser preenchido");
        }
        
        return true ;
    }

    public void incluir (Fornecedor fornecedor) throws ExcecaoSCEV {
        try {
            if (validar(fornecedor))
              fornecedorDAO.incluir(fornecedor);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }
        
    }
    
    public void alterar (Fornecedor fornecedor) throws ExcecaoSCEV {
        try {
            if (validar(fornecedor))
                fornecedorDAO.alterar(fornecedor);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }
        //comentário
    }

        public void excluir (Fornecedor fornecedor) throws ExcecaoSCEV {
        try {
            fornecedorDAO.excluir(fornecedor);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }
        
    }

    public void carregar(Fornecedor fornecedor) throws ExcecaoSCEV {
        try {
            fornecedorDAO.carregar(fornecedor);
        } catch (ExcecaoSCEV ex)  {
            throw new ExcecaoSCEV(ex.getMsg());
        }
    }

    public void ordenar(int ordenacao, List<Fornecedor> lista) {
       
        if (ordenacao == 0) {
            Collections.sort(lista, new OrdenacaoPorCodigoFornecedor());
        } else {
            Collections.sort(lista, new OrdenacaoPorNomeFornecedor());
        }
    }
    


        
        
    }
        
        
    
   